/*  PLUTO JS -Scripting Web Server.
    Copyright (C) 2013 vivek gangadharan

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package pluto.js;

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.Scriptable;
import pluto.core.*;
import pluto.http.HTTPRequest;
import pluto.http.HTTPResponse;
import pluto.js.api.Request;
import pluto.js.api.Response;



public class JSFunctionExecutor {

    public static void callJSFunction(final Host host,final ApplicationConfiguration config, final Function function, final JSCallBack callback, final HTTPRequest req, final HTTPResponse res) {
        Context context = null;
        try {
            context = Context.enter();
            Scriptable threadScope = context.newObject(host.global());
            threadScope.setParentScope(null);
            Object[] arg = {new Request(req), new Response(res)};
            Object result = function.call(context, threadScope, null, arg);
            callback.sucess(context, result, req, res);
        } catch (Exception e) {
            callback.failed(context, e, req, res);
        } finally {
            Context.exit();
        }

    }
}
